#include <stdio.h>
#include <string.h>

void BubbleSort(int NUM[], int n)
{
    int j, k;
    for (int i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - 1 - i; j++)
        {
            if (NUM[j] > NUM[j + 1])
            {
                k = NUM[j];
                NUM[j] = NUM[j + 1];
                NUM[j + 1] = k;
            }
        }
    }
}

void selectsort(int num[], int n)
{
    int i, j;
    int minIndex = 0; // 已排好序的最后一个下标
    for (i = 0; i < n - 1; i++)
    {
        minIndex = i;               // 当前已排好序的最后一个元素下标
        for (j = i + 1; j < n; j++) // 在未排序好的数据中找到最小的值对应的下标
        {
            if (num[j] < num[minIndex])
            {
                // 将当前遇到的小值的位置标记下来
                minIndex = j;
            }
        }
        // 此时已经在未排序的数据中找到了最小的数据  将数据交换 排序存放
        int k;
        k = num[i];
        num[i] = num[minIndex];
        num[minIndex] = k;
    }
}

void InsertSort(int NUM[], int n)
{
    int i, j, temp; // i:已排序中的最后一个下标  从0开始
    for (i = 0; i < n - 1; i++)
    {
        // 拿i+1个数据去与已排序序列找自己的位置
        for (j = i; j >= 0; j--)
        {
            if (NUM[j + 1] < NUM[j])
            {
                temp = NUM[j + 1];
                NUM[j + 1] = NUM[j];
                NUM[j] = temp;
            }
            else
            {
                break;
            }
        }
    }
}

// 快速排序法  挖坑法
void QuickSort1(int *a, int begin, int end)
{

    int i = begin;  // 第一位
    int j = end;    // 最后一位
    int key = a[i]; // 将第一个数作为基准值-- 先找到一个基准值

    // 进行排序---> 最终结果就是 左面的 都比基准值小 ，右面的都比 基准值大，所以这是所有循环的结束条件
    while (i < j)
    {
        // 下面的循环执行的条件是 如果右面的比基准值大，就赋一下值，否则继续向前移动
        while (i < j && a[j] >= key) // i<j 是 当前while循环的结束条件，如果没有这个，i会大于j，出现越界，错误
        {
            j--; // 继续走
        } // 如果不成立，也就是 a[j] <key;右面的比key小了，那就换个位置
        // 把a[j]的数据给a[i]
        a[i] = a[j];

        // 将事先保存好的基准值与左边的值进行比较，如果基准值大，保持不变，i往前
        // 然后 判断一下这个新的a[i]，也就是之前的a[j]跟key值的关系---> 一定是 a[i]<key
        // 所以把i向前移动一下，i++
        while (i < j && a[i] <= key)
        {
            i++;
        }
        // 移动完以后，把新的位置的a[i]的数值 给刚才的 a[j],然后开始下一次循环
        a[j] = a[i];
    }

    // 跳出循环，将基准值放入数据a[i]中
    a[i] = key;
    // 对基准值左边 的所有数据 再次进行快速查找（递归）
    if (i - 1 > begin)
    {
        QuickSort1(a, begin, i - 1);
    }

    // 对基准值右边的所有数据再次进行快速查找（递归）
    if (i + 1 < end)
    {
        QuickSort1(a, i + 1, end);
    }
}

struct infoData
{
    char name[20];
    int number
};
void main()
{
    // int NUM[100] = {16, 35687, 8996, 35, 87654, 639, 55};
    // // BubbleSort(NUM, 7);
    // selectsort(NUM, 7);
    // // InsertSort(NUM, 7);
    // // QuickSort1(NUM, 0,6);
    // printf("排序后的数组为：");
    // for (int i = 0; i < 7; i++)
    // {
    //     printf("%d ", NUM[i]);
    // }
    // printf("\n");
    // int a = 7;
    // float x = 2.5, y = 4.7;
    // printf("%lf", x + a % 3 * (int)(x + y) % 2 / 4);

    // int arr[10] = {1, 8, 3, 6, 9, 7, 5, 6, 2, 4};
    // for (int i = 0; i < sizeof(arr) / sizeof(int); i++)
    // {
    //     for (int j = i; j < sizeof(arr) / sizeof(int); j++)
    //     {
    //         if (arr[i] < arr[j])
    //         {
    //             int temp = arr[i];
    //             arr[i] = arr[j];
    //             arr[j] = temp;
    //         }
    //     }
    // }
    // printf("排序后的数组为：");
    // for (size_t i = 0; i < sizeof(arr) / sizeof(int); i++)
    // {
    //     printf("%d ", arr[i]);
    // }

    // char b[30], *chp;
    // strcpy(&b[0], "GH");
    // strcpy(&b[1], "DEF");
    // strcpy(&b[2], "ABC");
    // printf("%s\n", b);

    // char arr[11] = {"zbchjilwut"};
    // int i, j, tem;
    // for (i = 0; i < sizeof(arr) / sizeof(char); i++)
    // {
    //     for (j = i; j < sizeof(arr) / sizeof(char); j++)
    //     {
    //         // if ((int)(arr[i]) < (int)(arr[j]))
    //         if (arr[i] < arr[j])
    //         {
    //             tem = arr[i];
    //             arr[i] = arr[j];
    //              arr[j] = tem;
    //         }
    //     }
    // }

    // for (int k = 0; k < sizeof(arr) / sizeof(char); k++)
    // {
    //     printf("%c ", arr[k]);
    // }

    // float num1 = 77.4;
    // printf("num1:%.1lf\n", num1);

    FILE *fp = fopen("1.txt", "w+");
    struct infoData Data = {"南方航空", -1000};
    fprintf(fp, "name: %s\nnumber: %d", Data.name, Data.number);
}